package com.sheng.leetcode.year2023.month12.day13;

import org.junit.Test;

/**
 * @author by ls
 * @date 2023/12/13
 * <p>
 * 2697. 字典序最小回文串
 * <p>
 * 给你一个由 小写英文字母 组成的字符串 s ，你可以对其执行一些操作。在一步操作中，你可以用其他小写英文字母 替换  s 中的一个字符。<p>
 * 请你执行 尽可能少的操作 ，使 s 变成一个 回文串 。如果执行 最少 操作次数的方案不止一种，则只需选取 字典序最小 的方案。<p>
 * 对于两个长度相同的字符串 a 和 b ，在 a 和 b 出现不同的第一个位置，
 * 如果该位置上 a 中对应字母比 b 中对应字母在字母表中出现顺序更早，则认为 a 的字典序比 b 的字典序要小。<p>
 * 返回最终的回文字符串。<p>
 * <p>
 * 示例 1：<p>
 * 输入：s = "egcfe"<p>
 * 输出："efcfe"<p>
 * 解释：将 "egcfe" 变成回文字符串的最小操作次数为 1 ，修改 1 次得到的字典序最小回文字符串是 "efcfe"，只需将 'g' 改为 'f' 。<p>
 * <p>
 * 示例 2：<p>
 * 输入：s = "abcd"<p>
 * 输出："abba"<p>
 * 解释：将 "abcd" 变成回文字符串的最小操作次数为 2 ，修改 2 次得到的字典序最小回文字符串是 "abba" 。<p>
 * <p>
 * 示例 3：<p>
 * 输入：s = "seven"<p>
 * 输出："neven"<p>
 * 解释：将 "seven" 变成回文字符串的最小操作次数为 1 ，修改 1 次得到的字典序最小回文字符串是 "neven" 。<p>
 * <p>
 * 提示：<p>
 * 1 <= s.length <= 1000<p>
 * s 仅由小写英文字母组成<p>
 */
public class LeetCode2697 {

    @Test
    public void test01() {
//        String s = "egcfe";
//        String s = "abcd";
        String s = "seven";
        System.out.println(new Solution().makeSmallestPalindrome(s));
    }
}

class Solution {
    public String makeSmallestPalindrome(String s) {
        String[] split = s.split("");
        int left = 0, right = s.length() - 1;
        while (left < right) {
            if (!split[left].equals(split[right])) {
                if (split[left].compareTo(split[right]) < 0) {
                    split[right] = split[left];
                } else {
                    split[left] = split[right];
                }
            }
            left++;
            right--;
        }
        return String.join("", split);
    }
}
